/*
* Copyright (C) 2012-2013, <Aeihu.z, aeihu.z@gmail.com>.
*
* Game Scenario Maker is a free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* Version 2(GPLv2) as published by the Free Software Foundation.
*/

//#include "CScrollbar.h"
//
//CScrollbar::CScrollbar()
//{
//    //Visible =
//    IsMouseOver =
//    IsMouseDown = false;
//
//    Surf_TilesetOfBar =
//    Surf_TilesetOfUpArrow =
//    Surf_TilesetOfDownArrow = 
//    Surf_Bar =
//    Surf_Scrollbar = NULL;
//
//    MouseY =
//    //Value =
//    Offset =
//    MaxValue = 
//
//    Rect_Scrollbar.x =
//    Rect_Scrollbar.y =
//    Rect_Scrollbar.w =
//    Rect_Scrollbar.h =
//    
//    Offset =
//    Rect_Bar.x =
//    Rect_Bar.y =
//    Rect_Bar.w =
//    Rect_Bar.h = 0;
//    
//    State_UpArrow =
//    State_DownArrow =
//    State_Bar = MOUSE_NORMAL;
//}
//
//void CScrollbar::OnCleanup()
//{
//    if (Surf_TilesetOfUpArrow != NULL)
//        SDL_FreeSurface(Surf_TilesetOfUpArrow);
//
//    if (Surf_TilesetOfDownArrow != NULL)
//        SDL_FreeSurface(Surf_TilesetOfDownArrow);
//    
//    if (Surf_Bar != NULL)
//        SDL_FreeSurface(Surf_Bar);
//
//    if (Surf_Scrollbar != NULL)
//        SDL_FreeSurface(Surf_Scrollbar);
//
//    if (Surf_TilesetOfBar != NULL)
//        SDL_FreeSurface(Surf_TilesetOfBar);
//    
//    Surf_TilesetOfBar = Surf_Bar = Surf_TilesetOfUpArrow = Surf_TilesetOfDownArrow = Surf_Scrollbar = NULL;
//}
//
//void CScrollbar::OnLoop()
//{
//    if (MaxValue < 1)
//        return;
//
//    SDL_FillRect(Surf_Scrollbar, NULL, 0);
//    CSurface::OnDraw(Surf_Scrollbar, Surf_TilesetOfUpArrow, 
//        0, 0, 
//        State_UpArrow * CCommon::common.BOX_TILE_SIZE, 0, 
//        CCommon::common.BOX_TILE_SIZE, CCommon::common.BOX_TILE_SIZE);
//    
//    CSurface::OnDraw(Surf_Scrollbar, Surf_TilesetOfDownArrow, 
//        0, Surf_Scrollbar->h - CCommon::common.BOX_TILE_SIZE, 
//        State_DownArrow * CCommon::common.BOX_TILE_SIZE, 0, 
//        CCommon::common.BOX_TILE_SIZE, CCommon::common.BOX_TILE_SIZE);
//
//    CSurface::OnDraw(Surf_Scrollbar, Surf_Bar, 0, CCommon::common.BOX_TILE_SIZE + Offset,//Value,
//        State_Bar * CCommon::common.BOX_TILE_SIZE, 0, 
//        CCommon::common.BOX_TILE_SIZE, Surf_Bar->h);
//}
//
//
//void CScrollbar::OnRender(SDL_Surface* Surf_Dest)
//{
//    if (MaxValue < 1)
//        return;
//
//    SDL_Rect rect = {Rect_Scrollbar.x, Rect_Scrollbar.y , 0, 0};
//
//    CSurface::OnDraw(Surf_Dest, Surf_Scrollbar, rect.x, rect.y);
//}
//
//void CScrollbar::OnMouseMove(int x, int y)
//{
//    if (MaxValue < 1)
//        return;
//
//    if (IsMouseDown)
//    {
//        int tmp_Offset = Offset;
//
//        if (y != MouseY)
//            Offset += y - MouseY;
//
//        if (Offset > MaxValue)
//            Offset = MaxValue;
//        else if (Offset < 0)
//            Offset = 0;
//
//        RefOffset(tmp_Offset - Offset);
//    }
//    else 
//    {
//        State_UpArrow = 
//        State_DownArrow =
//        State_Bar = MOUSE_NORMAL;
//
//        if( ( x > Rect_Scrollbar.x ) && 
//            ( x < Rect_Scrollbar.x + Surf_Scrollbar->w ) && 
//            ( y > Rect_Scrollbar.y ) && ( y < Rect_Scrollbar.y + Surf_Scrollbar->h ))
//        {
//            if (( y > Rect_Scrollbar.y ) && ( y < Rect_Scrollbar.y + CCommon::common.BOX_TILE_SIZE ))
//            {
//                State_UpArrow = MOUSE_OVER;
//                State_DownArrow = MOUSE_NORMAL;
//                State_Bar = MOUSE_NORMAL;
//            }
//            else if (( y > Rect_Scrollbar.y  + Surf_Scrollbar->h - CCommon::common.BOX_TILE_SIZE ) && 
//                ( y < Rect_Scrollbar.y + Surf_Scrollbar->h))
//            {
//                State_DownArrow = MOUSE_OVER;
//                State_UpArrow = MOUSE_NORMAL;
//                State_Bar = MOUSE_NORMAL;
//            }
//            else if (( y > Rect_Bar.y + Offset ) && ( y < Rect_Bar.y + Offset + Surf_Bar->h ))
//            {
//                State_Bar = MOUSE_OVER;
//                State_UpArrow = MOUSE_NORMAL;
//                State_DownArrow = MOUSE_NORMAL;
//            }
//
//            IsMouseOver = true;
//        }
//        else
//        {
//            IsMouseOver = false;
//        }
//    }
//}
//
//void CScrollbar::OnLButtonDown(int x, int y)
//{
//    if (MaxValue < 1)
//        return;
//
//    if (IsMouseOver)
//    {
//        if (( y > Rect_Scrollbar.y ) && ( y < Rect_Scrollbar.y + CCommon::common.BOX_TILE_SIZE ))
//        {
//            State_UpArrow = MOUSE_DOWN;
//            State_DownArrow =
//            State_Bar = MOUSE_NORMAL;
//            OffsetSubt();
//        }
//        else if (( y > Rect_Scrollbar.y  + Surf_Scrollbar->h -  CCommon::common.BOX_TILE_SIZE ) && 
//            ( y < Rect_Scrollbar.y + Surf_Scrollbar->h))
//        {
//            State_DownArrow = MOUSE_DOWN;
//            State_UpArrow = 
//            State_Bar = MOUSE_NORMAL;
//            OffsetIncr();
//        }
//        else if (( y > Rect_Bar.y + Offset ) && ( y < Rect_Bar.y + Offset + Surf_Bar->h ))
//        {
//            State_Bar = MOUSE_DOWN;
//            State_UpArrow = 
//            State_DownArrow = MOUSE_NORMAL;
//            IsMouseDown = true;
//            MouseY = y;
//        }
//    }
//}
//
//void CScrollbar::OnLButtonUp(int x, int y)
//{
//    //if (MaxValue < 1)
//    //    return;
//
//    State_UpArrow = 
//    State_DownArrow =
//    State_Bar = MOUSE_NORMAL;
//    IsMouseDown = false;
//    OnMouseMove(x, y);
//}
//
//void CScrollbar::OffsetIncr()
//{
//    Offset++;
//    if (Offset > MaxValue)
//        Offset = MaxValue;
//    else
//        RefOffset(1);
//}
//
//void CScrollbar::OffsetSubt()
//{
//    Offset--;
//    if (Offset < 0)
//        Offset = 0;
//    else
//        RefOffset(-1);
//}
//
//bool CScrollbar::OnInit(int Height,
//    int TilesetOfUpArrow, int TilesetOfDownArrow, 
//    int TilesetOfBar, SDL_Surface* Surf_Tilesets)
//{
//    //Surf_TilesetOfUpArrow = SDL_CreateRGBSurface(SDL_SRCALPHA | SDL_HWSURFACE | SDL_SRCCOLORKEY, 
//    //    CCommon::common.BOX_TILE_SIZE * 3 , CCommon::common.BOX_TILE_SIZE, 32, 0, 0, 0, 0);
//    
//    Surf_TilesetOfUpArrow = CSurface::OnCreate(CCommon::common.BOX_TILE_SIZE * 3, CCommon::common.BOX_TILE_SIZE);
//    //if (!CSurface::Transparent(Surf_TilesetOfUpArrow,
//    //    CCommon::common.COLOR_KEY_RED, 
//    //    CCommon::common.COLOR_KEY_GREEN,
//    //    CCommon::common.COLOR_KEY_BLUE)){
//    //    return false;
// //   }
//    if(Surf_TilesetOfUpArrow == NULL)
//        return false;
//
//    //Surf_TilesetOfDownArrow = SDL_CreateRGBSurface(SDL_SRCALPHA | SDL_HWSURFACE | SDL_SRCCOLORKEY, 
//    //    CCommon::common.BOX_TILE_SIZE * 3, CCommon::common.BOX_TILE_SIZE, 32, 0, 0, 0, 0);
//    Surf_TilesetOfDownArrow = CSurface::OnCreate(CCommon::common.BOX_TILE_SIZE * 3, CCommon::common.BOX_TILE_SIZE);
//    
//    //if (!CSurface::Transparent(Surf_TilesetOfDownArrow,
//    //    CCommon::common.COLOR_KEY_RED, 
//    //    CCommon::common.COLOR_KEY_GREEN,
//    //    CCommon::common.COLOR_KEY_BLUE)){
//    //    return false;
// //   }
//    if(Surf_TilesetOfDownArrow == NULL)
//        return false;
//    
//    //Surf_TilesetOfBar = SDL_CreateRGBSurface(SDL_SRCALPHA | SDL_HWSURFACE | SDL_SRCCOLORKEY, 
//    //    CCommon::common.BOX_TILE_SIZE * 3, CCommon::common.BOX_TILE_SIZE, 32, 0, 0, 0, 0);
//    Surf_TilesetOfBar = CSurface::OnCreate(CCommon::common.BOX_TILE_SIZE * 3, CCommon::common.BOX_TILE_SIZE);
//        
//    //if (!CSurface::Transparent(Surf_TilesetOfBar,
//    //    CCommon::common.COLOR_KEY_RED, 
//    //    CCommon::common.COLOR_KEY_GREEN,
//    //    CCommon::common.COLOR_KEY_BLUE)){
//    //    return false;
// //   }
//    if(Surf_TilesetOfBar == NULL)
//        return false;
//    
//    //Surf_Scrollbar = SDL_CreateRGBSurface(SDL_SRCALPHA | SDL_HWSURFACE | SDL_SRCCOLORKEY, 
//    //    CCommon::common.BOX_TILE_SIZE , Height, 
//    //    32, 0, 0, 0, 0);
//    Surf_Scrollbar = CSurface::OnCreate(CCommon::common.BOX_TILE_SIZE, Height);
//    
//    //if (!CSurface::Transparent(Surf_Scrollbar,
//    //    CCommon::common.COLOR_KEY_RED, 
//    //    CCommon::common.COLOR_KEY_GREEN,
//    //    CCommon::common.COLOR_KEY_BLUE)){
//    //    return false;
// //   }
//    if(Surf_Scrollbar == NULL)
//        return false;
//
//    int TilesetWidth = Surf_Tilesets->w / CCommon::common.BOX_TILE_SIZE;
//
//    for (int i = 0; i < 3; i++)
//    {
//        CSurface::OnDraw(Surf_TilesetOfUpArrow, Surf_Tilesets, i * CCommon::common.BOX_TILE_SIZE, 0,
//            ((TilesetOfUpArrow + i) % TilesetWidth) * CCommon::common.BOX_TILE_SIZE, 
//            ((TilesetOfUpArrow + i) / TilesetWidth) * CCommon::common.BOX_TILE_SIZE,
//            CCommon::common.BOX_TILE_SIZE, CCommon::common.BOX_TILE_SIZE);
//        
//        CSurface::OnDraw(Surf_TilesetOfDownArrow, Surf_Tilesets, i * CCommon::common.BOX_TILE_SIZE, 0,
//            ((TilesetOfDownArrow + i) % TilesetWidth) * CCommon::common.BOX_TILE_SIZE, 
//            ((TilesetOfDownArrow + i) / TilesetWidth) * CCommon::common.BOX_TILE_SIZE,
//            CCommon::common.BOX_TILE_SIZE, CCommon::common.BOX_TILE_SIZE);
//        
//        CSurface::OnDraw(Surf_TilesetOfBar, Surf_Tilesets, i * CCommon::common.BOX_TILE_SIZE, 0,
//            ((TilesetOfBar + i) % TilesetWidth) * CCommon::common.BOX_TILE_SIZE, 
//            ((TilesetOfBar + i) / TilesetWidth) * CCommon::common.BOX_TILE_SIZE,
//            CCommon::common.BOX_TILE_SIZE, CCommon::common.BOX_TILE_SIZE);
//    }
//
//    return true;
//}
//
//bool CScrollbar::SetMaxValue(int value)
//{
//    if (value < 1)
//        return true;
//
//    if (Surf_TilesetOfBar == NULL)
//        return false;
//
//    if (value == MaxValue)
//        return true;
//
//    if (Surf_Bar != NULL)
//    {
//        SDL_FreeSurface(Surf_Bar);
//        Surf_Bar = NULL;
//    }
//
//    double zoom = ((double)(Surf_Scrollbar->h - 2 * CCommon::common.BOX_TILE_SIZE - value)) 
//        / ((double)CCommon::common.BOX_TILE_SIZE);
//
//    Surf_Bar = zoomSurface(Surf_TilesetOfBar, 1, zoom, SMOOTHING_ON);  
//
//    if (Surf_Bar == NULL)
//        return false;
//
//    MaxValue = value;
//    return true;
//}
//
//void CScrollbar::SetCoordinate(int x, int y)
//{
//    Rect_Scrollbar.x = x;
//    Rect_Scrollbar.y = y;
//    
//    Rect_Bar.x = x;
//    Rect_Bar.y = y + Offset + CCommon::common.BOX_TILE_SIZE;
//}
